Facilitating transition of network operations from IP version 4 to IP version 6

ABSTRACT

Methods, apparatuses and systems directed to facilitating transitions from IPv4 to IPv6 networks. In particular implementations, the invention facilitates or enables accessibility of network application services between IPv4 and IPv6 hosts, or traversal of network paths including both IPv6 or IPv4 domains. Particular implementations of the invention are directed to selective mapping of network layer addresses between IPv6 and IPv4 protocols and Domain Name System records under one or more policy controls. Other implementations of the invention are directed to a proxy-to-proxy based tunnel architecture allowing hosts implementing a first network layer protocol, such as IPv4, to traverse a network implementing a second network layer protocol, such as IPv6.

TECHNICAL FIELD

The present disclosure generally relates to network layer protocols and,more particularly, to methods, apparatuses and systems facilitatingtransitions from a first network layer protocol to a second networklayer protocol in a network communications environment.

BACKGROUND

A common problem facing organizations today is the shortage of InternetProtocol (IP) version 4 (IPv4) addresses. Network Address Translation(NAT) is often used to alleviate the address shortage problem; however,numerous business-critical applications that require end-to-endcommunications do not function over NAT. Internet Protocol version 6(IPv6) is an network layer protocol for packet-switched internetworks.IPv4 is currently the dominant Internet Protocol version, and was thefirst to receive widespread use. The Internet Engineering Task Force(IETF) has designated IPv6 as its successor for general use on theInternet. IPv6 has a much larger address space than IPv4, which allowsflexibility in allocating addresses and routing traffic. The extendedaddress length eliminates the need to use network address translation toavoid address exhaustion, and also simplifies aspects of addressassignment and renumbering when changing Internet connectivityproviders.

An organization's decision to adopt IPv6 raises a number of transitionissues. For example, the first set of criteria to be evaluated fordecision making, is the availability of existing network or applicationservices in IPv6 networks, and whether new IPv6 services are accessibleto users with only IPv4 connectivity. Until IPv6 completely replacesIPv4, a number of so-called transition mechanisms are needed to enableIPv6-only hosts to reach IPv4 services and to allow isolated IPv6 hostsand networks to reach the IPv6 Internet over the IPv4 infrastructure.For example, Nordmark et al., RFC 4213, “Basic Transition Mechanisms forIPv6 Hosts and Routers,” Network Working Group, Internet EngineeringTask Force (October 2005), describe dual stack and tunneling mechanismsto facilitate transition from IPv4 to IPv6. Dual stack refers to the useof network stacks that support both IPv4 and IPv6. An example oftunneling is the encapsulation of IPv6 packets with IPv4 headers toallow packets to be forwarded between IPv6 networks over IPv4 networks.

SUMMARY

The present invention provides methods, apparatuses and systems directedto facilitating transitions from IPv4 to IPv6 networks. In particularimplementations, the invention facilitates or enables accessibility ofnetwork application services between IPv4 and IPv6 hosts, or traversalof network paths including both IPv6 or IPv4 domains. Particularimplementations of the invention are directed to selective mapping ofnetwork layer addresses between IPv6 and IPv4 protocols and Domain NameSystem records under one or more policy controls. Other implementationsof the invention are directed to a proxy-based tunnel architectureallowing hosts implementing a first network layer protocol, such asIPv4, to traverse a network implementing a second network layerprotocol, such as IPv6.

DESCRIPTION OF THE DRAWINGS

FIGS. 1A and 1B are schematic diagrams of computer network environments,in which particular embodiments of the present invention may operate.

FIG. 2 is a functional block diagram illustrating an example networkdevice hardware system architecture.

FIG. 3 is a schematic diagram of a computer network environment, inwhich a proxy can enable access to both IPv4 and IPv6 resources.

FIG. 4 is a schematic diagram of an example proxy-to-proxy basedtunneling architecture.

FIG. 5 is a block diagram illustrating functional modules of a proxyaccording to one possible embodiment of the invention.

FIG. 6 is a flow chart showing an example method directed to proxyingDomain Name System (DNS) lookups and applying polices to facilitateaccess between hosts applying different network layer protocols.

FIG. 7 is a flow chart illustrating an example method that can beimplemented in connection with a proxy-to-proxy based tunnelingarchitecture.

DESCRIPTION OF EXAMPLE EMBODIMENT(S) A. Overview & Example NetworkEnvironment

FIGS. 1A and 1B illustrate example computer network environments, inwhich particular embodiments of the present invention have application.As FIG. 1A shows, the computer network environment may comprise one ormore servers 20, one or more proxies 30 and one or more clients 60.Routers 40, 42, 44 and networks 50 a, 50 b, 50 c interconnect server(s)20, proxy(ies) 30, client(s) 60 and other hosts operably connected tonetwork 49. Networks 50 a, 50 b, 50 c may comprise Local Area Networks(LANs) implemented by one or more switches, hubs, bridges, wirelessaccess points, and/or other network devices. In one embodiment, networks50 a, 50 b, 50 c are Ethernet (IEEE 802.3) networks; however, other linklayer protocols can be employed.

Servers 20 host one or more network applications, such as a web site oran enterprise business application, accessible to one or more clients60. Servers 20 may include HTTP server, file server, media server,streaming media server and/or other functional modules to delivernetwork applications over the computer network environment. Servers 20may establish HyperText Transport Protocol (HTTP) connections directlywith clients 60 and/or with proxies 30 that proxy transactions betweenservers 20 and clients 60. Clients 60 are computing systems, such asdesktop computers, laptop computers and mobile devices, that host clientapplications that access servers 20 and other hosts operably connectedto the computer network environment.

A proxy 30 is an intermediate system that is situated between a client60 and a server 20 of a transaction. Various types of proxies exist. InWeb access, a proxy can act as a web cache to reduce information accesslatency and bandwidth consumption. A proxy located in front of a groupof origin servers, such as a reverse proxy or surrogate, offers loadbalancing capability and hides the identities of those servers. Inaddition to caching and load balancing, proxies can provide many othertypes of services including user authentication, connectionacceleration, redirection, request and response filtering, accesslogging, translation and transcoding, virus scanning and spywareremoval. For example, a proxy 30 can accelerate SSL connections byoffloading computation intensive cryptographic operations to built-incrypto hardware; a proxy can translate web page content from onelanguage into another before presenting the information to the user; aproxy can perform compression and decompression over slow or costsensitive links. Proxies can also act as provisioned service accesspoints to traverse firewalls. An intelligent information security proxyis a complex network appliance that is comprised of both hardware andsoftware, which facilitates the construction of intelligent andfine-grained policy rules, and is the enforcer of those policies.

Proxies 30, in a particular implementation, are network proxies, such asforward proxy caches or gateway (reverse proxy) caches, that operateexplicitly or transparently to clients 60. Proxies 30 are operative toterminate connections on the application and/or transport layer withclients 60, and establish application and/or transport layer connectionswith servers 20. Proxies 30 can apply one or more policies—such assecurity policies, caching policies and the like—when intermediatingconnections between servers 20 and clients 60. In a particularembodiment, proxies 30 implement a redirection protocol to negotiate andestablish one or more service groups with router 40. Definition of theService Groups allows proxies 30 to act as proxy caches for one or moreservers 20, as discussed below. Alternative embodiments are alsopossible. For example, as FIG. 1B illustrates, the proxies may betransparent proxies, such as proxy 30 a, disposed between network 50 band router 40 to obviate the need for redirection mechanisms.

Routers 40, 42, 44 are network devices that route packets according toinformation at Layer 3 (or Network Layer) of the Open SystemsInterconnection (OSI) Reference Model. Routers 40, 42 44 can beIPv4-capable, IPv6 capable or implement dual stacks capable ofsupporting both IPv6 and IPv4 routing functions. In the implementationshown in FIG. 1A, router 40 can be configured to redirect networktraffic to one of the proxies 30 to allow the proxies to intermediatetransactions between clients 60 and servers 20. In a particularembodiment, router 40 can implement a cache communication protocol, suchas the Web Cache Communications Protocol (WCCP) specified by InternetDraft “Web Cache Communication Protocol V2.0,”{http://tools.ietf.org/id/draft-wilson-wrec-wccp-v2-01.txt}, which isincorporated by reference herein. In a particular implementation, router40 is operative to negotiate and configure one or more WCCP ServiceGroups with one or more proxies 30. Each Service Group identifies theattributes defining the packets (e.g., IP addresses, TCP port numbers,etc.) that router 40 should redirect to one of the proxies 30 in theService Group. Of course, other redirection mechanisms and protocols canbe used.

As FIG. 1A illustrates, proxies 30 and router 40 are in the samebroadcast or Layer 2 domain. In other embodiments, proxies 30 and router40 may be in different broadcast or Layer 2 domains. Still further, asdiscussed below, embodiments of the invention can operate in a widevariety of network configurations and topologies. For example, proxies30 may be physically connected to one or more access links or otherstrategic locations in a network to obviate the need for redirectionmechanisms. FIG. 3 illustrates an example network configuration,according to one particular implementation of the invention, thatfacilitates access between IPv4 and IPv6 hosts. As FIG. 3 illustrates,proxy 30 is physically or functionally (by some redirection mechanism)disposed between client 60 and servers 20 a, 20 b. In the implementationshown, server 20 a supports only the IPv4 protocol and is connected toan IPv4 network 49 a. Server 20 b supports only the IPv6 protocol and isconnected to an IPv6 network. Depending on the embodiment, client 60 andnetwork 49 c may support only the IPv4 or only the IPv6 networkprotocol. As discussed in more detail below, proxy 30 can be utilized toenable an IPv4-only client or an IPv6-only client to access either IPv4or IPv6 resources.

B. Example Operation

Proxy applications—such as web caches and network security or firewalldevices—typically operate at Layer 7 of the OSI Reference Model;however, as part of such functionality, these proxies may also implementlower layer protocols, such as the TCP/IP protocol suite. FIG. 5 setsforth an example functional architecture for proxy 30 according to onepossible implementation of the invention. Proxy 30 hosts one or moreapplication proxies 502. Application proxy 502 is a module that proxiesapplication-level transactions between clients 60 and servers 20. In aparticular implementation, application proxy 502 emulates an applicationserver to clients 60 and emulates a client to application servers 20.Application proxy 502 can be configured to proxy a variety of differentapplications, such as Domain Name System (DNS) applications, SecureSockets Layer (SSL) applications, HyperText Transport Protocol (HTTP)applications, File Transfer Protocol (FTP) applications, MultimediaMessaging Service (MMS) applications, Instant Messaging (IM)applications, and the like. User interface module 506 includesfunctionality that supports interface configuration and workflowsaccording to which a network administrator may configure proxy.

IP-protocol-agnostic Application Programming Interface (IPAPI) 504 is anapplication programming interface layer that, relative to applicationproxy(ies) 502, presents hosts or endpoints as address or host objects,but abstracts away from the application proxy 502 the details of thenetwork layer protocol associated with the host—i.e., whether the hostis an IPv6-only host, an IPv4-only host, or a dual stack host. In otherwords, hosts are represented as address or host objects that includeaddress information as generic host identification to the applicationproxy. The address or host object could be identified by reference tothe actual network layer address; however, to the application proxy(ies)502, the network layer address is merely a value string that maps to thehost or address object. In other implementations, an arbitrary pointervalue can be used to identify host or address objects which theapplication proxy(ies) 502 use to identify and distinguish betweenhosts. Lower layers of the communications protocol and processing stack,such as IPAPI 504, parse the address object to identify the actualnetwork layer protocol in order to appropriately route the packets forprocessing.

For example, IPAPI 504 may support a connect_to_endpoint(address_object) API, which when called by an application proxy 502,causes IPAPI 504 to parse the network layer address of the addressobject to determine whether it is an IPv4 or IPv6 address and forwardthe request to appropriate processing modules of the communicationsprotocol stack. Similarly, the network layer address fields contained inuser interfaces presented by user interface module 506 are agnostic tothe network layer protocol associated with a given network layeraddress. That is, when presented with a network address field inconnection with a configuration interface, a network administrator mayinput either a 4-octet (32-bit) IPv4 address or an IPv6 address having 8groups of four hexadecimal digits into the field. A parser module of theIPAPI 504 parses the address for identification of protocol version andappropriate processing. A network administrator, accessing the userinterface module 506, may configure one or more policies to addressvarious integration issues resulting from IPv4 to IPv6 network layerprotocol transitions, whether such policy actions involves toIPv4-to-IPv6 conversion or vice versa.

Socket layer 508 provides a software endpoint for two-way communicationsbetween two application programs across a network. A given socketinstance is typically bound to a port number so that a transport layer,such as Transmission Control Protocol (TCP) layer 510, can identify theapplication, to which that data is destined to be sent. To supportvarious proxy operations, an application proxy 502, such as a DNS proxy,has a socket that is bound to a specific port number. The applicationproxy 502 listens to the socket for requests transmitted by clients. Inaddition, socket layer 508 also supports client-side functions, whichapplication proxy(ies) 502 utilize to initiate connections withapplication servers on behalf of clients. As FIG. 5 shows, socket layer508 includes an IPv4 socket module 508 a, which supports connectionswith IPv4 resources, and an IPv6 socket module 508 b, which supportsconnections with IPv6 resources. Transmission Control Protocol (TCP)layer 510 implements transport layer functions, such as connectionestablishment, end-to-end flow control, and reliable delivery. Proxy 30may include additional transport layers, such as the User DatagramProtocol (UDP), as needed to support various network applications.Lastly, IPv4 layer 512 is a software module that implements IPv4 networklayer protocol functions, while IPv6 layer 514 is a software module thatimplements IPv6 network layer protocol functions. Not illustrated, forpurposes of clarity, are additional lower layers, such as link andphysical layers of proxy 30.

B.1. IPv4-IPv6 Mapping under DNS Policy Control

There are two ways that a proxy can terminate connection, explicitly ortransparently. In explicit proxy deployments, all client requests to anIPv6 host are sent directly to the proxy without resolving the domainname on the client. The benefit of an explicit proxy is that the Ipv4client does not have to be concerned about whether an IPv6 domain namecan be resolved and it is up to the proxy to handle the domain nameresolution. For example, a user enters http://ipv6.example.com in abrowser of an Ipv4 client, and if the browser is configured to access anexplicit proxy, no DNS lookup for the Ipv4 “A” record is performed foripv6.example.com. Note ipv6.google.com does not have an IPv4 address sothe name lookup of “A” record for ipv6.google.com will fail. The clientestablishes a connection to the proxy and then it is the proxy that willperform a DNS lookup for “AAAA” record for ipv6.google.com. The DNSserver returns the associated IPv6 address to the proxy. The proxyinitiates an IPv6 connection to the server corresponding toipv6.example.com. The connection between the client and the proxy is anIPv4 connection, while the connection from the proxy to the server is anIPv6 connection. The client is unaware of the fact the contents areactually retrieved from an IPv6 host. This is the easiest setup todeployment an IPv4-to-IPv6 proxy.

In transparent proxy deployments, the operating paradigm is differentand the name resolution process depends on whether the domain name ofthe URL maps to IPv4 as well as IPv6 addresses or whether only an IPv6address is available. For example, the domain www.kame.net is present onboth IPv4 and IPv6 networks. Therefore, when the URL www.kame.net isentered into a browser, an Ipv4 client will perform a DNS lookup for an“A” record of www.kame.net and the IPv4 address for www.kame.net isreturned. The HTTP request initiated by the client will be transparentlyintercepted by the proxy and it has full control on whether the upstreamconnection should be made over IPv4 or IPv6 network.

In the case that the IPv6 host is only present on an IPv6 network, suchas ipv6.example.com, getting the proxy to transparently intercept theclient request can be problematic, because the DNS lookup for an “A”record for ipv6.example.com will fail on the Ipv4 client and thus noconnection request will be initiated by the client. In order to workaround this issue, the proxy can manipulate the DNS lookup on the clientnetwork by hosting a DNS proxy. The purpose of the DNS proxy is toreturn a valid IPv4 address back to the client when the client performsthe DNS lookup for an “A” record for ipv6.example.com. Although the “A”record for ipv6.example.com does not exist, the proxy can be programmedto return an “A” record back to the client when the proxy recognizesthat ipv6.example.com only has an “AAAA” record associated with it. Thefabricated IPv4 address in the “A” record should be chosen properly suchthat the address is both routable and places the proxy in the path whenthe client connects to this fabricated IPv4 address foripv6.example.com.

Multiple options can be utilized to fabricate the IPv4 address returnedto the client. One option is to use the proxy's IPv4 address. In thiscase, the client establishes a connection to the proxy, and from thatperspective the proxy will process the request similar to the case of anexplicit proxy as mentioned previously. Using the proxy's IPv4 addressworks with many network protocols, such as HTTP, because the HTTPprotocol supports the concept of proxy. The proxy accesses the hostheader field in the HTTP request to determine the domain name of theserver, thus the mapping between the fabricated address and the domainname. A second option is to assign different IPv4 addresses to differentdomain names and create a mapping table in the proxy to keep track ofthe mapping relationship.

When initially accessing a server 20, a client 60 typically accesses aDNS server to resolve a host name (e.g., www.hostname.com) to an IPaddress to allow for packet routing across a network. IPv6 addresses arerepresented in the Domain Name System by so-called AAAA resourcerecords, while IPv4 addresses are represented by so-called A records. Ahost name may resolve to two or more records across different recordtypes. After a client receives a DNS record, it may cache it and re-usethis information, as opposed to transmitting a new request, until therecord expires as defined in the Time-To-Live (TTL) field of the DNSrecord.

One of the application proxies 502 hosted on proxy 30 is a DNS proxythat proxies DNS transactions between a client 60 and a DNS server. Asdiscussed below, the DNS proxy may be configured to apply variouspolicies that facilitate transition between, and integration of, IPv4and IPv6 networks. Still further, the proxy 30, in the implementationdiscussed below, operates as a transparent proxy. FIG. 6 illustrates anexample method according to one possible implementation of theinvention. The process illustrated in FIG. 6 can be applied to allow aclient 60 that supports only the IPv4 network layer protocol to accessIPv4 and IPv6 resources. When proxy 30 receives a DNS request from anIPv4-only client (602), it may transmit a DNS request to one or more DNSservers to perform a lookup of IPv4 and IPv6 addresses that map to thehost name identified in the DNS request (604). In the implementationshown, if the IPv4 lookup does not fail (606), the proxy 30 returns theDNS response to the client (612). If the IPv4 lookup (606) and the IPv6lookup (608) both fail, the proxy returns a failure response to theclient (614). Otherwise, if the IPv6 lookup succeeds, the proxy 30returns to the client 60 a DNS response with an IPv4 address of theproxy 30 (such as the proxy's own unique IP address or an address from apool of reserved addresses) and caches the hostname-to-address mappingin a table or other data structure for later reference (610). In otherimplementations, the proxy 30 does not cache the hostname-to-Ipv6address mapping, if the unique IP address of the proxy 30 itself isused. Rather, when the client initiates a connection to the proxy andtransmits an HTTP request, the proxy 30 accesses the hostname in theHTTP request transmitted by the client and performs an IPv6 DNS look upat that time when establishing a connection to the Ipv6 server. Otherimplementations are also possible. For example, when using a pool ofIpv4 addresses, proxy 30 may map the selected Ipv4 address from the pooldirectly to the Ipv6 address returned in the DNS response or to thehostname. In the latter embodiment, when an HTTP request is received,the proxy accesses the mapping information against the destination Ipv4address to identify the host name and performs an Ipv6 DNS lookup toidentify the Ipv6 address.

Proxy 30, in some implementations, will maintain this mappinginformation for an amount of time that corresponds to the TTL valuereturned in the DNS response. After this TTL period, a clientapplication will typically transmit a new DNS request, which will causethe proxy to refresh its host name-address mapping information asdiscussed above. Some client applications, however, cache the DNSresponse information for as long as the client application remains open.Accordingly, some implementations of the proxy maintains the host-nameaddress mapping information for a longer period of time.

With reference to FIG. 3, client 60, after it obtains an IP address, maythen transmit an HTTP request using the IPv4 network address returnedduring the DNS lookup. If the actual IPv4 address of a server, such asserver 20 a, was provided to the client, proxy 30 can intercept the HTTPrequest and use the IP address of server 20 a identified in the requestwhen initiating a connection to that server. However, if the IPv4address of the proxy is returned to the client 60, the proxy 30 has tomap information obtained from the HTTP request, or other data packets,transmitted by the client 60 to the IPv6 address of the destinationserver 20 b. This mapping can be accomplished in several mannersdepending on various implementation details.

In one implementation, the IPv4 address of the proxy 30 that is returnedto a client is non-unique relative to the IPv6 hosts corresponding totransactions, which the proxy may be intermediating at a given time. Forexample, the proxy 30 may return the same IPv4 address to a client 60when mapping from an IPv6 address to an IPv4 address. In such animplementation, the proxy 30 accesses the host name identified in HTTPhost headers including in the HTTP request transmitted by the client 60and maps the host name in the HTTP request to the IPv6 address stored inits cache. After identifying the IPv6 address of the server 20 b, theproxy 30 opens an HTTP connection with the server. In oneimplementation, the proxy 30 uses as the source address an IPv6 addressof the proxy similar to a router using Network Address Translation(NAT).

Other implementations are possible. For example, proxy 30 may maintain apool of IPv4 addresses that it can use to establish unique mappingsbetween IPv4 addresses transmitted to clients in DNS responses and theIPv6 addresses returned in response to host name lookups with a DNSserver. In this manner, relying on host names in HTTP host headers canbe obviated. In other implementations, proxy 30 can apply a combinationof the two techniques based on information available in HTTP messages,such as user agent identifiers, that indicate whether the clientapplication supports the use of host headers, such as browser clientscomplying with HTTP version 1.1 and higher. In addition, subsequent HTTPrequests to the same host within the TTL period, will involve the proxy30 accessing its cache to map to an IPv6 address based on either thehost name or a unique IPv4 address in the HTTP request.

The policy configuration illustrated in FIG. 6 represents one of manypossible embodiments of the invention. For example, in the embodiment ofFIG. 6, proxy returns an actual IPv4 address of a server if it isavailable. In another possible policy configuration, the proxy 30, whena host name resolves to an IPv4 address and an IPv6 address, can returnthe actual IPv4 address of the server (or an IPv4 address of the proxy30), and during intermediation of a transaction, map the IPv4destination address identified in an HTTP request, for example, to theIPv6 address identified during the DNS lookup. In this manner, proxy 30can be configured to favor utilization of IPv6 resources when possible.To support such an implementation, proxy 30 can maintain a mapping tablewhere each entry comprises an IPv4 address, an IPv6 address and a hostname. Furthermore, a similar connection-mapping mechanism can beemployed to achieve a form of load balancing, if an IPv4 andcorresponding IPv6 resource are both available. Still further, policiescan be configured to allow connections only to Ipv4 or Ipv6 resourcesfor selected domain names, or to specify Ipv4 or Ipv6 preferences forselected domain names.

Still further, proxy 30 can also be utilized in connection withIPv6-only and dual-stack clients 60 as well. For example, proxy 30 canbe configured to allow IPv6-only clients to access IPv4-only resources.In another example embodiment, proxy 30 can be configured to favorutilization of IPv6 resources over IPv4 resources, when possible.

B.2. Proxy-to-Proxy based Tunnel to Traverse Incompatible Network Cloud

With reference to FIG. 4, proxies 30 a, 30 b can also be configured tofacilitate a transaction between IPv4-only hosts to traverse an IPv6network. As FIG. 4 illustrates, proxies 30 a, 30 b operate tointermediate a transaction between server 20 a and client 60, both ofwhich support only the IPv4 network layer protocol.

As FIG. 4 illustrates, a client-server transaction, such as an HTTPtransaction, involves three application/transport layer connections dueto interception and processing of client and server messages by theproxies 30 a, 30 b at the application layer. Unlike the Layer 3tunneling mechanisms disclosed in RFC 4213, however, the IPv4 packetsembodying the messages are not encapsulated in IPv6 headers andforwarded across IPv6 network 51 b. Rather, when a first proxy 30 areceives a request from a client 60, such as an HTTP request, over atransport layer connection 71 on the IPv4 network 51 a, it establishes anew transport layer connection 72 with second proxy 30 b on IPv6 network51 b, and forwards the data of the HTTP request to the second proxy 30b. The first proxy 30 a also maintains a mapping between connection 71and connection 72. Processing the request at the application layer byproxy 30 a, however, causes the IPv4 header of the request, includingthe IPv4 address of the server 20 a, transmitted by the client to bestripped away.

FIG. 7 illustrates a process flow implemented by the second proxy 30 b.As FIG. 7 shows, when second proxy 30 b receives a packet from firstproxy 30 b (702), it determines whether the packet corresponds to a newrequest, such as a new HTTP request (704). If so, the second proxy 30 baccesses host information embodied in the request to resolve the networklayer address of the server 20 b and opens a new transport layerconnection 73 on IPv4 network 51 c with the server 20 a using thenetwork layer address (706). The second proxy 30 b also maintains amapping between connection 72 and connection 73. The second proxy 30 bthen forwards the request over the new connection to server 20 a (708).As discussed above, many requests, such as HTTP requests, include hostnames and other information that can be used to resolve an IP address.In one embodiment, second proxy 30 b, for HTTP requests, accesses thehost name information in the host header and performs an IPv4 DNS lookupto resolve the IPv4 address of the server 20 a. Other implementationsare possible. For example, first proxy 30 a may append a header to thefirst packet of a new request that identifies the IP address (andpossibly port number) associated with the server 20 a. In addition, theproxy-to-proxy based tunnel architecture can be applied to allow IPv6hosts to interact over IPv4 networks.

In addition, given the 1:1:1 relationship between connections 71, 72,73, forwarding of additional packets of a transaction between client 60and server 20 a, such as response packets, is straightforward, as secondproxy 30 b can write packet data received on the socket corresponding toconnection 73 to the socket corresponding connection 72. Similarly,first proxy 30 a can write packet data received on the socketcorresponding to connection 72 to the socket corresponding connection71.

The proxy-to-proxy based tunnel architecture set forth above achieves avariety of advantages over the Layer 3 tunneling mechanisms described inRFC 4213. For example, the proxy-to-proxy tunnel architecture is moreefficient as it eliminates one encapsulating header from packetsforwarded across the network 51 b. In addition, terminating connectionsat the application layer allows for application of larger set of morecomplex user and application oriented policies, and allows for manyexisting IPv4 applications to operate across new IPv6 networkinfrastructure, or new IPv6 applications to operate across existing IPv4network infrastructure, without any knowledge of that infrastructure.Furthermore, terminating connections at the proxies 30 a, 30 b increasessecurity by eliminating access to the network layer address informationof client 60 and server 20 a from routing or forwarding nodes of network51 b.

C. Example Computing System Architectures

While the foregoing processes and mechanisms can be implemented by awide variety of physical systems and in a wide variety of networkenvironments, the proxy systems described below provide examplecomputing system architectures for didactic, rather than limiting,purposes.

FIG. 2 illustrates an example computing system architecture, which maybe used to implement a physical proxy server. In one embodiment,hardware system 200 comprises a processor 202, a cache memory 204, andone or more executable modules and drivers, stored on a computerreadable medium, directed to the functions described herein.Additionally, hardware system 200 includes a high performanceinput/output (I/O) bus 206 and a standard I/O bus 208. A host bridge 210couples processor 202 to high performance I/O bus 206, whereas I/O busbridge 212 couples the two buses 206 and 208 to each other. A systemmemory 214 and one or more network/communication interfaces 216 coupleto bus 206. Hardware system 200 may further include video memory (notshown) and a display device coupled to the video memory. Mass storage218, and I/O ports 220 couple to bus 208. Hardware system 200 mayoptionally include a keyboard and pointing device, and a display device(not shown) coupled to bus 208. Collectively, these elements areintended to represent a broad category of computer hardware systems,including but not limited to general purpose computer systems based onthe x86-compatible processors manufactured by Intel Corporation of SantaClara, Calif., and the x86-compatible processors manufactured byAdvanced Micro Devices (AMD), Inc., of Sunnyvale, Calif., as well as anyother suitable processor.

The elements of hardware system 200 are described in greater detailbelow. In particular, network interface 216 provides communicationbetween hardware system 200 and any of a wide range of networks, such asan Ethernet (e.g., IEEE 802.3) network, etc. Mass storage 218 providespermanent storage for the data and programming instructions to performthe above-described functions implemented in the cache or proxy 30,whereas system memory 214 (e.g., DRAM) provides temporary storage forthe data and programming instructions when executed by processor 202.I/O ports 220 are one or more serial and/or parallel communication portsthat provide communication between additional peripheral devices, whichmay be coupled to hardware system 200.

Hardware system 200 may include a variety of system architectures; andvarious components of hardware system 200 may be rearranged. Forexample, cache 204 may be on-chip with processor 202. Alternatively,cache 204 and processor 202 may be packed together as a “processormodule,” with processor 202 being referred to as the “processor core.”Furthermore, certain embodiments of the present invention may notrequire nor include all of the above components. For example, theperipheral devices shown coupled to standard I/O bus 208 may couple tohigh performance I/O bus 206. In addition, in some embodiments, only asingle bus may exist, with the components of hardware system 200 beingcoupled to the single bus. Furthermore, hardware system 200 may includeadditional components, such as additional processors, storage devices,or memories.

As discussed below, in one implementation, the operations of one or moreof the proxy servers described herein are implemented as a series ofexecutable modules run by hardware system 200. In a particularembodiment, a set of software modules or drivers implements a networkcommunications protocol stack, including a link layer driver, a networklayer driver, one or more transport layer modules (e.g., TCP, UDP,etc.), session layer modules, application layer modules and the like.The hardware system 200 may also host one or more application proxymodules, such as DNS and HTTP proxy modules. The foregoing functionalmodules may be realized by hardware, executable modules stored on acomputer readable medium, or a combination of both. For example, thefunctional modules may comprise a plurality or series of instructions tobe executed by a processor in a hardware system, such as processor 202.Initially, the series of instructions may be stored on a storage device,such as mass storage 218. However, the series of instructions can bestored on any suitable storage medium, such as a diskette, CD-ROM, ROM,EEPROM, etc. Furthermore, the series of instructions need not be storedlocally, and could be received from a remote storage device, such as aserver on a network, via network/communication interface 216. Theinstructions are copied from the storage device, such as mass storage218, into memory 214 and then accessed and executed by processor 202.

An operating system manages and controls the operation of hardwaresystem 200, including the input and output of data to and from softwareapplications (not shown). The operating system provides an interfacebetween the software applications being executed on the system and thehardware components of the system. Any suitable operating system may beused, such as the Windows Operating System offered by MicrosoftCorporation, the Apple Macintosh Operating System, available from AppleComputer Inc. of Cupertino, Calif., UNIX operating systems, LINUXoperating systems, BSD operating systems, and the like. Of course, otherimplementations are possible. For example, the proxy and cachingfunctionalities described herein may be implemented in firmware or on anapplication specific integrated circuit.

Furthermore, the above-described elements and operations can becomprised of instructions that are stored on storage media. Theinstructions can be retrieved and executed by a processing system. Someexamples of instructions are software, program code, and firmware. Someexamples of storage media are memory devices, tape, disks, integratedcircuits, and servers. The instructions are operational when executed bythe processing system to direct the processing system to operate inaccord with the invention. The term “processing system” refers to asingle processing device or a group of inter-operational processingdevices. Some examples of processing devices are integrated circuits andlogic circuitry. Those skilled in the art are familiar withinstructions, computers, and storage media.

The present invention has been explained with reference to specificembodiments. For example, while embodiments of the present inventionhave been described as operating in connection with HTTP and TCP, thepresent invention can be used in connection with any suitable protocolenvironment. Furthermore, implementations of the invention can be usedin systems directed to other types of proxies, such as protocol ornetwork traffic accelerators, firewalls and packet inspection devices.Other embodiments will be evident to those of ordinary skill in the art.It is therefore not intended that the present invention be limited,except as indicated by the appended claims.

1. A method comprising: receiving, at a proxy, a request from a client,wherein the request includes a host name, and wherein the request isembodied in a packet having a first network layer address, associatedwith the client, corresponding to a first network layer protocol;accessing one or more data stores of mappings between host names andnetwork layer addresses to identify one or more network layer addressesassociated with the host name identified in the request, wherein one ormore of the network layer addresses in the one or more data storescorrespond to the first network layer protocol and other ones of thenetwork layer addresses correspond to a second network layer protocol;and generating a response to the request, wherein the response includesa second network layer address corresponding to the first network layerprotocol, wherein the second network layer address is selected from theone or more identified network layer addresses mapped to the host nameor a third network layer address based on application of one or morepolicies; and forwarding the response to the client, wherein applicationof the one or more policies comprises determining whether one or more ofthe identified network layer addresses corresponds to the second networklayer protocol and selecting the third network layer address if at leastone of the one or more identified network layer addresses corresponds tothe second network layer protocol; and wherein the method furthercomprises caching, in a mapping data structure, one of the one or moreidentified network layer addresses in association with the host nameidentified in the request, if the third network layer address isselected based on the application of the one or more policies.
 2. Themethod of claim 1 wherein the third network layer address is a networklayer address of the proxy.
 3. The method of claim 1 wherein the thirdnetwork layer address is a network layer address selected from a pool ofnetwork layer addresses.
 4. The method of claim 1 wherein at least oneof the one or more data stores is a Domain Name System (DNS) server. 5.The method of claim 3 further comprising if the third network layeraddress is selected, caching, in a mapping data structure, the selectednetwork layer address in association with the host name identified inthe request.
 6. The method of claim 1 further comprising proxying atransaction between the client and a remote host associated with thehost name; wherein proxying the transaction comprises establishing afirst connection with the client according to the first network layerprotocol; establishing a second connection with the remote host; andforwarding data received from the client on the first connection to theremote host over the second connection.
 7. The method of claim 6 whereinthe second connection with the remote host employs the second networklayer protocol.
 8. The method of claim 1 wherein the first network layerprotocol is version 4 of the Internet Protocol and the second networklayer protocol is version 6 of the Internet Protocol.
 9. The method ofclaim 1 wherein the first network layer protocol is version 6 of theInternet Protocol and the second network layer protocol is version 4 ofthe Internet Protocol.
 10. The method of claim 1 wherein the one or morepolicies are operative to bias selection of the second network layeraddress based on a preference for the first network layer protocol orthe second network layer protocol.
 11. The method of claim 1 wherein oneof the one or more identified network layer addresses is selected forthe second network layer address if the identified network layer addresscorresponds to the first network layer protocol.
 12. The method of claim1 wherein the third network layer address is selected for the secondnetwork layer address if at least one of the one or more identifiednetwork layer addresses corresponds to the second network layerprotocol.
 13. A method comprising: receiving, at a proxy, an addresslookup request from a client, wherein the address lookup requestincludes a host name associated with a remote host, and wherein theaddress lookup request is embodied in a packet having a first networklayer address, associated with the client, corresponding to a firstnetwork layer protocol; accessing one or more data stores of mappingsbetween host names and network layer addresses to identify one or morenetwork layer addresses associated with the host name identified in theaddress lookup request, wherein one or more of the network layeraddresses in the one or more data stores correspond to the first networklayer protocol and other ones of the network layer addresses correspondto a second network layer protocol; and wherein, if all of the one ormore identified network layer addresses correspond to the second networklayer protocol, then: selecting, from a pool of network layer addresses,a second network layer address corresponding to the first network layerprotocol, and caching, in a mapping data structure, the second networklayer address in association with the host name identified in theaddress lookup request; and generating a response to the address lookuprequest that includes the second network layer address corresponding tothe first network layer protocol; and transmitting the response to theclient.
 14. The method of claim 13 further comprising proxying atransaction between the client and the remote host associated with thehost name; wherein proxying the transaction comprises establishing afirst connection with the client according to the first network layerprotocol; establishing a second connection with the remote hostaccording to the second network layer protocol; and forwarding datareceived from the client on the first connection to the remote host overthe second connection.
 15. The method of claim 14 wherein establishingthe second connection comprises accessing the mapping data structureagainst the second network layer address to identify the host name; andlooking up a third network layer address corresponding to the secondnetwork layer protocol using the host name.
 16. A method, comprising:receiving, on a first connection over a first network, a packet from aremote proxy, wherein the first network corresponds to a first networklayer protocol; determining whether the packet corresponds to a newrequest; if the packet corresponds to a new request, accessing hostinformation embodied in the request and resolving a network layeraddress of a remote server, wherein the network layer addresscorresponds to a second network layer protocol; establishing a secondconnection over a second network with the remote server using thenetwork layer address; and forwarding the request on the secondconnection over the second network. wherein resolving the network layeraddress of the remote server comprises performing a network addresslookup in a data store that maintains mappings between host names andnetwork layer addresses, wherein the network address is selected fromone or more network layer addresses mapped to the host information or athird network layer address based on application of one or more policiesby determining whether the one or more network layer addressescorresponds to the second network layer protocol and selecting the thirdnetwork layer address if at least one of the one or more network layeraddresses corresponds to the second network layer protocol.
 17. Themethod of claim 16 further comprising maintaining a mapping between thefirst connection and the second connection; forwarding data received onthe first connection to the remote server over the second connection;and forwarding data received on the second connection to the remoteproxy over the first connection.
 18. The method of claim 16 wherein thefirst network layer protocol is version 6 of the Internet Protocol andthe second network layer protocol is version 4 of the Internet Protocol.